package com.example.config;

import demo.common.util.PrintUtils;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.BeanPostProcessor;

/**
 * BeanPostProcessor: 后置处理器。
 * 如果我们想在 Spring 容器完成 bean 的实例化并进行赋值之后，在调用初始化方法的前后添加一些自己的逻辑处理。
 * 可以定义一个或多个 BeanPostProcessor 接口实现类，然后注册到 Spring IoC 容器中。
 *
 * @author yexi
 */
public class CustomBeanPostProcessor implements BeanPostProcessor {

    /**
     * @param bean     实例化的新bean
     * @param beanName bean的名字
     */
    @Override
    public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
        System.out.printf("名称为%s、类型为%s的bean即将调用初始化方法\n", beanName, bean.getClass());
        // 将bean返回到容器中
        return bean;
    }

    @Override
    public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
        System.out.printf("名称为%s、类型为%s的bean初始化成功\n", beanName, bean.getClass());
        PrintUtils.println();
        return bean;
    }
}
